sevenSeg

Modified

2025-11-11

Source: Lab3Extra/sevenSeg.v (modified 2025-10-15 11:12)

// Seven-segment HEX decoder (active-low), ports per your schematic spec.
// Inputs : digit[0]..digit[3]   (digit[0] = LSB, digit[3] = MSB)
// Outputs: segments[0]..segments[6]  (0=a, 1=b, ..., 6=g), active-low

module sevenSeg (
    input  wire [3:0] digit,      // {digit[3],digit[2],digit[1],digit[0]}
    output wire [6:0] segments    // segments[0]=a ... segments[6]=g (active-low)
);
    wire D3 = digit[3];
    wire D2 = digit[2];
    wire D1 = digit[1];
    wire D0 = digit[0];

    // Your SOP forms (Sx = active-high "lit"), then invert to active-low outputs.
    wire Sa = (~D2 & ~D0)
            | (~D3 &  D2 &  D0)
            | ( D3 & ~D0)
            | ( D3 & ~D2 & ~D1)
            | (~D3 &  D1)
            | ( D2 &  D1);

    wire Sb = (~D3 &  D1 &  D0)
            | (~D2 & ~D0)
            | ( D3 & ~D1 &  D0)
            | (~D3 & ~D1 & ~D0)
            | (~D2 & ~D1);

    wire Sc = (~D2 & ~D1)
            | (~D1 &  D0)
            | (~D2 &  D0)
            | (~D3 &  D0)
            | (~D3 & ~D1);

    wire Sd = ( D2 & ~D1 &  D0)
            | ( D3 & ~D1)
            | (~D2 &  D1 &  D0)
            | (~D3 & ~D2 & ~D0)
            | ( D2 &  D1 & ~D0);

    wire Se = ( D3 &  D1)
            | (~D2 & ~D0)
            | ( D3 &  D2)
            | ( D1 & ~D0);

    wire Sf = ( D3 &  D2 &  D1)
            | ( D3 & ~D0)
            | (~D3 &  D2 & ~D1)
            | ( D3 & ~D2 & ~D1)
            | (~D1 & ~D0)
            | ( D2 & ~D0);

    wire Sg = ( D3 &  D1)
            | (~D2 &  D1)
            | (~D3 &  D2 & ~D1)
            | ( D3 & ~D2)
            | (~D3 &  D2 & ~D0);

    // Map: segments[0]=a ... segments[6]=g, active-low: x = ~Sx
    assign segments[0] = ~Sa;  // a
    assign segments[1] = ~Sb;  // b
    assign segments[2] = ~Sc;  // c
    assign segments[3] = ~Sd;  // d
    assign segments[4] = ~Se;  // e
    assign segments[5] = ~Sf;  // f
    assign segments[6] = ~Sg;  // g
endmodule